// watcher 观察者
/*
    vm 实例
    key 属性名
    oldValue：旧值


    cb: 更新视图的回调

    update方法：执行cb
*/
class Watcher {
    constructor(vm,key, cb) {
        this.vm = vm
        this.key = key
        // 回调，负责更新视图
        this.cb = cb
        // 执行这个构造器时说明，当前 watcher正在订阅某个属性（key）,因此，将Dep的静态target设置为 this(当前watcher),后续 get时，可以取到
        Dep.target = this
        // 下方执行this.vm[key], 即执行了 get方法，会将当前watcher订阅到 当前属性（key）的subs里面去
        this.oldValue = this.vm[key]
        // 订阅完成之后，需要将target清空，后续可能还要使用
        Dep.target = null
    }
    update() {
        const newValue = this.vm[this.key]
        if(newValue === this.oldValue) {
            return
        }
        // 具体更新视图，就是在dom上面如何正确的展示 数据（如何赋值）
        this.cb(newValue)
    }
}